package cn.itcast.controller;

import cn.itcast.pojo.Emp;
import cn.itcast.pojo.EmpExpr;
import cn.itcast.pojo.Result;
import cn.itcast.service.EmpService;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@RestController
@RequestMapping("/emps")
public class EmpController {
    @Autowired
    private EmpService empService;


    /**
     * 2.1员工列表分页查询
     *
     * @param name
     * @param gender   加上@DateTimeFormat(pattern = "yyyy-MM-dd")注解是为了解决前端请求 key value
     * @param begin    这种参数的时间问题,前端请求过来的默认是字符串,但是实体类类中是LocalDate类型,所以需要加@DateTimeFormat注解
     * @param end      注意 : 区分@JsonFormat 注解,他是解决前端请求的是json格式的数据,在实体类中的属性上声明此注解
     * @param page
     * @param pageSize
     * @return
     */
    @GetMapping
    public Result page(
            String name,
            Integer gender,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize
    ) {

        return empService.select(name, gender, begin, end, page, pageSize);

    }

    //2.2 根据id删除员工(批量)
    @DeleteMapping
    public Result deleteByIds(@RequestParam List<Integer> ids) {
        return empService.removeEmpsByIds(ids);
    }

    //2.3添加员工
    @PostMapping
    public Result addEmp(@RequestBody Emp emp) {

        return empService.savemp(emp);

    }

    //2.4 根据id查询员工信息
    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id) {
        return empService.getEmpById(id);
    }

    //2.5 修改员工
    @PutMapping
    public Result update(@RequestBody Emp emp) {
        return empService.updateEmp(emp);
    }

    //2.6 查询全部员工
    @GetMapping("/list")
    public Result selectAll() {
        return empService.selectAll();
    }

}
